package cc.rengu.redp.flowable.task;

import cc.rengu.redp.flowable.service.SysWorkFlowService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;
import org.flowable.engine.history.HistoricProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * <p>Title: ClearFlowEngineHistory.java</p>
 * <p>Description:清空工作流所存放的历史数据，每天清理保留时间外的数据，目标为一年以上（可设定）的历史数据 </p>
 *
 * @author xionglz
 * @date 2018年6月28日
 */
@Slf4j
@Component
public class ClearFlowEngineHistory {
    @Autowired
    private SysWorkFlowService sysWorkFlowService;

    public void clear(String days) {
        log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>进入定时任务清空Flowable历史数据");

        //获取系统当前时间一年前的时间
        Date date = DateUtils.addMinutes(new Date(), 0 - Integer.valueOf(days));
        log.debug("一年前的日期为：" + date);
        //获取所有流程定义
        List<HistoricProcessInstance> historicProcessInstances = sysWorkFlowService.getFinishedProcInst(date);

        //使用流程实例ID删除，以流程实例ID为条件级联删除所有历史表对应数据
        for (HistoricProcessInstance his : historicProcessInstances) {
            sysWorkFlowService.deleteHistoryProcInst(his.getId());
            log.debug("流程实例Id为：" + his.getId());
        }

        log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>定时任务清空Flowable历史数据结束");
    }

}
